home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
CRS
/
crs08.d81
/
unapcarc.arc
/
RENAME.PAS
next >
Wrap
Pascal/Delphi Source File
|
2009-10-10
|
4KB
|
150 lines
(* "RENAME.PAS" 6/8/87 *)
PROGRAM RENAME;
CONST MAXLIST=100;
DISKUNIT=8; DATACH=2; CMDCH=15;
TYPE NAME_DEF=ARRAY[0..15] OF CHAR;
RENAME_DEF=RECORD
PC_NAME: STRING[12];
CBM_TYPE: CHAR;
NAME_CHANGE: BOOLEAN;
CBM_NAME: NAME_DEF
END;
DIR_ENTRY=RECORD
NEXT_SECTOR,
FILE_TYPE: CHAR;
FILLER: INTEGER;
FILE_NAME: NAME_DEF
END;
VAR OK, CHANGED, MATCH: BOOLEAN;
CH: CHAR;
SIZE, COMMAPOS, CHANGES,
SECTOR, NEXT,
I, J, K: INTEGER;
RENAMES, COMMAND: TEXT;
DATA: FILE OF DIR_ENTRY;
NUMBERSIGN: STRING[1];
HOLD_NAME: STRING[16];
FILENAME, LINE: STRING[64];
TEMP: NAME_DEF;
LIST: ARRAY[1..MAXLIST] OF RENAME_DEF;
PROCEDURE ERROR(CODE: INTEGER);
BEGIN
WRITELN('ERROR IN RENAME FILE!');
WRITELN('LINE=',I);
WRITELN('CODE=',CODE);
EXIT(PROGRAM)
END;
BEGIN
REPEAT
WRITELN('PROGRAM (C) 1987 BY W. KUSCHE');
WRITELN;
WRITELN('DO NOT SUPPLY ''.RNM'' SUFFIX!');
WRITE('NAME OF RENAME FILE? ');
READLN(FILENAME);
SIZE:=LENGTH(FILENAME);
IF SIZE=0
THEN EXIT(PROGRAM);
IF (SIZE>8) OR (POS('.',FILENAME)>0)
THEN OK:=FALSE
ELSE OK:=TRUE
UNTIL OK;
RESET(RENAMES,CONCAT(FILENAME,'.RNM'));
IF EOF(RENAMES)
THEN BEGIN
WRITELN('FILE NOT FOUND!');
EXIT(PROGRAM)
END;
I:=0;
REPEAT
READ(RENAMES,LINE);
IF LENGTH(LINE)>31
THEN ERROR(1);
I:=I+1;
COMMAPOS:=POS(',',LINE);
IF (COMMAPOS<2) OR (COMMAPOS>13)
THEN ERROR(2);
LIST[I].PC_NAME:=COPY(LINE,1,COMMAPOS-1);
LINE:=DELETE(LINE,1,COMMAPOS);
SIZE:=LENGTH(LINE);
IF SIZE=0
THEN ERROR(3);
CH:=LINE[1];
IF NOT ((CH='P') OR (CH='S'))
THEN ERROR(4);
IF CH='P'
THEN CH:=$82
ELSE CH:=$81;
LIST[I].CBM_TYPE:=CH;
IF SIZE=1
THEN LIST[I].NAME_CHANGE:=FALSE
ELSE BEGIN
LIST[I].NAME_CHANGE:=TRUE;
IF LINE[2]<>','
THEN ERROR(5);
LINE:=DELETE(LINE,1,2);
SIZE:=LENGTH(LINE);
FOR J:=0 TO SIZE-1
DO LIST[I].CBM_NAME[J]:=LINE[J+1];
IF SIZE<16
THEN FOR J:=SIZE TO 15
DO LIST[I].CBM_NAME[J]:=$A0
END
UNTIL EOF(RENAMES);
CLOSE(RENAMES);
CHANGES:=I;
REWRITE(COMMAND,DISKUNIT,CMDCH,'I0');
NUMBERSIGN:='#';
REWRITE(DATA,DISKUNIT,DATACH,NUMBERSIGN);
SECTOR:=1;
REPEAT
WRITELN(COMMAND,'U1:',DATACH,' 0 18 ',SECTOR);
CHANGED:=FALSE;
FOR I:=0 TO 7
DO BEGIN
WRITELN(COMMAND,'B-P:',DATACH,' ',I*32+1);
GET(DATA);
IF I=0
THEN NEXT:=ORD(DATA^.NEXT_SECTOR);
IF ORD(DATA^.FILE_TYPE)>127
THEN BEGIN
HOLD_NAME:='';
FOR J:=0 TO 15
DO BEGIN
CH:=DATA^.FILE_NAME[J];
IF CH<>$A0
THEN HOLD_NAME:=CONCAT(HOLD_NAME,CH)
END;
MATCH:=FALSE;
J:=0;
REPEAT
J:=J+1;
IF HOLD_NAME=LIST[J].PC_NAME
THEN MATCH:=TRUE
UNTIL MATCH OR (J=CHANGES);
IF MATCH
THEN BEGIN
DATA^.FILE_TYPE:=LIST[J].CBM_TYPE;
IF LIST[J].NAME_CHANGE
THEN FOR K:=0 TO 15
DO DATA^.FILE_NAME[K]:=LIST[J].CBM_NAME[K];
(*
TEMP:=LIST[J].CBM_NAME;
DATA^.FILE_NAME:=TEMP
*)
WRITELN(COMMAND,'B-P:',DATACH,' ',I*32+1);
PUT(DATA);
CHANGED:=TRUE
END
END
END;
IF CHANGED
THEN WRITELN(COMMAND,'U2:',DATACH,' 0 18 ',SECTOR);
SECTOR:=NEXT
UNTIL SECTOR>20
END.